<?php


namespace Gateway;


class GatewayRequest
{
    /**
     * 用户appCode,参考 : https://esandinfo.yuque.com/yv6e1k/aa4qsg/cdwove
     */
    public $appCode;
    /**
     * 业务action（参考具体业务协议文档）
     */
    public $act;
    /**
     * 业务ID (随机数，保证其唯一)
     */
    public $bizNo;
    /**
     * 当前时间戳(时区为北京时间，防黑客重放攻击)，格式为：yyyyMMddHHmmssSSS
     */
    public $timestamp;
    /**
     * 签名类型，1：ECC,2:RSA,3:MD5
     */
    public $type;
    /**
     * 业务内容
     */
    public $bizContent;
    /**
     * 数据签名，可参考下面章节 “业务服务器签名验签”
     */
    public $sign;

    public function __construct()
    {

    }

    /**
     * 把对象序列化为JSON字符串
     * @return false|string
     */
    public function toJsonStr() {
        $jsonStr = json_encode($this);

        return $jsonStr;
    }

    /**
     * 对数据进行签名
     * @param key    签名密钥
     * @return 签名执行结果
     */
    public function genSign($key) {
        $result = false;
        do {
            switch ($this->type) {
                case "1": {// ECC256
                    $result = true;
                    break;
                }
                case "2": {//RSA2048
                    $result = true;
                    break;
                }
                case "3": { // MD5
                    // 构造报文
                    $signData = $this->bizNo . "&" . $this->appCode . "&" . $this->bizContent . "&" . $this->timestamp . "&" . $key;
                    $this->sign = md5($signData);
                    $result = true;
                    break;
                }
                default : {
                    LOG::ERROR("不支持签名类型 ：".$this->type);
                    break;
                }
            }
        } while (false);

        return $result;
    }
}
